package cn.bby.query.server.domain.service.manager;

import cn.bby.query.base.model.req.QueryRequest;
import cn.bby.query.base.model.req.QueryResponse;
import cn.bby.query.server.domain.agg.metadata.entity.InterfaceInfo;
import cn.bby.query.server.domain.agg.metadata.entity.valobj.ColumnInfo;
import cn.bby.query.server.domain.service.dto.DataUpdateParam;
import com.alibaba.fastjson2.JSONObject;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author ben
 * @since 2025/4/19 23:48
 */
public interface DataStorageManager {
    /**
     * 初始化数据结构
     */
    void initDataStruct(InterfaceInfo interfaceInfo);

    /**
     * 结束同步
     */
    void finishLoad(InterfaceInfo interfaceInfo);

    /**
     * 保存数据
     */
    void saveData(InterfaceInfo interfaceInfo, List<JSONObject> dataSet, String offset);

    /**
     * 删除数据结构
     */
    void deleteDataStruct(List<InterfaceInfo> interfaceInfos);

    /**
     * 查询数据
     */
    QueryResponse<JSONObject> query(InterfaceInfo interfaceDTO, QueryRequest request);

    /**
     * 查询列表
     *
     * @return
     */
    Set<String> queryIdByPrimaryValList(InterfaceInfo interfaceInfo, Map<ColumnInfo, Set<String>> map);

    /**
     * 批量更新数据
     */
    void updateDataBatchById(InterfaceInfo interfaceInfo, Set<String> keyValues, List<JSONObject> dataSet);

    /**
     * 根据参数更新数据
     */
    void updateDataByParam(InterfaceInfo interfaceInfo, List<DataUpdateParam> updateParams);

    /**
     * 删除数据
     */
    void deleteData(InterfaceInfo interfaceInfo, Map<ColumnInfo, Set<String>> fieldValMap);
}
